home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Practical Internet Web Designer 90
/
PIWD90.iso
/
pc
/
contents
/
flash_gaming
/
tutorial_files
/
Pages 70-80
/
question animation.swf.swf
/
scripts
/
FComboBoxSymbol.as
< prev
next >
Wrap
Text File
|
2003-01-01
|
14KB
|
479 lines
function FComboBoxClass()
{
_global._popUpLevel = _global._popUpLevel != undefined ? _global._popUpLevel + 1 : 20000;
this.superHolder = _root.createEmptyMovieClip("superHolder" + _popUpLevel,_popUpLevel);
var testContainer = this.superHolder.createEmptyMovieClip("testCont",20000);
var testBox = testContainer.attachMovie("FBoundingBoxSymbol","boundingBox_mc",0);
if(testBox._name == undefined)
{
this.superHolder.removeMovieClip();
this.superHolder = this._parent.createEmptyMovieClip("superHolder" + _popUpLevel,_popUpLevel);
}
else
{
testContainer.removeMovieClip();
}
if(this.rowCount == undefined)
{
this.rowCount = 8;
this.editable = false;
}
this.itemSymbol = "FComboBoxItemSymbol";
this.init();
this.permaScrollBar = false;
this.proxyBox_mc.gotoAndStop(1);
this.width = this._width;
this.height = this.proxyBox_mc._height * this._yscale / 100;
var i = 0;
while(i < this.labels.length)
{
this.addItem(this.labels[i],this.data[i]);
i++;
}
this.lastSelected = 0;
this.selectItem(0);
this._xscale = this._yscale = 100;
this.opened = false;
this.setSize(this.width);
this.highlightTop(false);
if(this.changeHandler.length > 0)
{
this.setChangeHandler(this.changeHandler);
}
this.onUnload = function()
{
this.superHolder.removeMovieClip();
};
this.setSelectedIndex(0,false);
this.value = "";
this.focusEnabled = true;
this.changeFlag = false;
}
FComboBoxClass.prototype = new FScrollSelectListClass();
Object.registerClass("FComboBoxSymbol",FComboBoxClass);
FComboBoxClass.prototype.modelChanged = function(eventObj)
{
super.modelChanged(eventObj);
var event = eventObj.event;
if(event == "addRows" || event == "deleteRows")
{
var diff = eventObj.lastRow - eventObj.firstRow + 1;
var mode = event != "addRows" ? -1 : 1;
var len = this.getLength();
var lenBefore = len - mode * diff;
if(this.rowCount > lenBefore || this.rowCount > len)
{
this.invalidate("setSize");
}
if(this.getSelectedIndex() == undefined)
{
this.setSelectedIndex(0,false);
}
}
else if(event == "updateAll")
{
this.invalidate("setSize");
}
};
FComboBoxClass.prototype.removeAll = function()
{
if(!this.enable)
{
return undefined;
}
super.removeAll();
if(this.editable)
{
this.value = "";
}
this.invalidate("setSize");
};
FComboBoxClass.prototype.setSize = function(w)
{
if(w == undefined || typeof w != "number" || w <= 0 || !this.enable)
{
return undefined;
}
this.proxyBox_mc._width = w;
this.container_mc.removeMovieClip();
this.measureItmHgt();
this.container_mc = this.superHolder.createEmptyMovieClip("container",3);
this.container_mc.tabChildren = false;
this.setPopUpLocation(this.container_mc);
this.container_mc.attachMovie("FBoundingBoxSymbol","boundingBox_mc",0);
this.boundingBox_mc = this.container_mc.boundingBox_mc;
this.boundingBox_mc.component = this;
this.registerSkinElement(this.boundingBox_mc.boundingBox,"background");
this.proxyBox_mc._height = this.itmHgt;
this.numDisplayed = Math.min(this.rowCount,this.getLength());
if(this.numDisplayed < 3)
{
this.numDisplayed = Math.min(3,this.getLength());
}
this.height = this.numDisplayed * (this.itmHgt - 2) + 2;
super.setSize(w,this.height);
this.attachMovie("DownArrow","downArrow",10);
this.downArrow._y = 0;
this.downArrow._width = this.itmHgt;
this.downArrow._height = this.itmHgt;
this.downArrow._x = this.proxyBox_mc._width - this.downArrow._width;
this.setEditable(this.editable);
this.container_mc._visible = this.opened;
this.highlightTop(false);
this.fader = this.superHolder.attachMovie("FBoundingBoxSymbol","faderX",4);
this.registerSkinElement(this.fader.boundingBox,"background");
this.fader._width = this.width;
this.fader._height = this.height;
this.fader._visible = false;
};
FComboBoxClass.prototype.setDataProvider = function(dp)
{
super.setDataProvider(dp);
this.invalidate("setSize");
this.setSelectedIndex(0);
};
FComboBoxClass.prototype.getValue = function()
{
if(this.editable)
{
return this.fLabel_mc.getLabel();
}
return super.getValue();
};
FComboBoxClass.prototype.getRowCount = function()
{
return this.rowCount;
};
FComboBoxClass.prototype.setRowCount = function(count)
{
this.rowCount = this.getLength() <= count ? count : Math.max(count,3);
this.setSize(this.width);
var len = this.getLength();
if(len - this.getScrollPosition() < this.rowCount)
{
this.setScrollPosition(len - Math.min(this.rowCount,len));
this.invalidate("updateControl");
}
};
FComboBoxClass.prototype.setEditable = function(editableFlag)
{
if(!this.enable)
{
return undefined;
}
this.editable = editableFlag;
if(!this.editable)
{
this.onPress = this.pressHandler;
this.useHandCursor = false;
this.trackAsMenu = true;
this.attachMovie("FComboBoxItemSymbol","fLabel_mc",5,{controller:this,itemNum:-1});
this.fLabel_mc.onRollOver = undefined;
this.fLabel_mc.setSize(this.width - this.itmHgt + 1,this.itmHgt);
this.topLabel = this.getSelectedItem();
this.fLabel_mc.drawItem(this.topLabel,false);
this.highlightTop(false);
}
else
{
this.attachMovie("FLabelSymbol","fLabel_mc",5);
this.fLabel_txt = this.fLabel_mc.labelField;
this.fLabel_txt.type = "input";
this.fLabel_txt._x = 4;
this.fLabel_txt.onSetFocus = this.onLabelFocus;
this.fLabel_mc.setSize(this.width - this.itmHgt - 3);
delete this.onPress;
this.fLabel_txt.onKillFocus = function()
{
this._parent._parent.myOnKillFocus();
};
this.fLabel_mc.setLabel(this.value);
this.fLabel_txt.onChanged = function()
{
this._parent._parent.findInputText();
};
this.downArrow.onPress = this.buttonPressHandler;
this.downArrow.useHandCursor = false;
this.downArrow.trackAsMenu = true;
}
};
FComboBoxClass.prototype.setEnabled = function(enabledFlag)
{
enabledFlag = !(enabledFlag == undefined || typeof enabledFlag != "boolean") ? enabledFlag : true;
super.setEnabled(enabledFlag);
this.registerSkinElement(this.boundingBox_mc.boundingBox,"background");
this.proxyBox_mc.gotoAndStop(!this.enable ? "disabled" : "enabled");
this.downArrow.gotoAndStop(!this.enable ? 3 : 1);
if(this.editable)
{
this.fLabel_txt.type = !enabledFlag ? "dynamic" : "input";
this.fLabel_txt.selectable = enabledFlag;
}
else if(enabledFlag)
{
this.fLabel_mc.drawItem(this.topLabel,false);
this.setSelectedIndex(this.getSelectedIndex(),false);
}
this.fLabel_mc.setEnabled(this.enable);
this.fLabel_txt.onSetFocus = !enabledFlag ? undefined : this.onLabelFocus;
};
FComboBoxClass.prototype.setSelectedIndex = function(index, flag)
{
super.setSelectedIndex(index,flag);
if(!this.editable)
{
this.topLabel = this.getSelectedItem();
this.fLabel_mc.drawItem(this.topLabel,false);
}
else
{
this.value = flag == undefined ? this.getSelectedItem().label : "";
this.fLabel_mc.setLabel(this.value);
}
this.invalidate("updateControl");
};
FComboBoxClass.prototype.setValue = function(value)
{
if(this.editable)
{
this.fLabel_mc.setLabel(value);
this.value = value;
}
};
FComboBoxClass.prototype.pressHandler = function()
{
this.focusRect.removeMovieClip();
if(this.enable)
{
if(!this.opened)
{
this.onMouseUp = this.releaseHandler;
}
else
{
this.onMouseUp = undefined;
}
this.changeFlag = false;
if(!this.focused)
{
this.pressFocus();
this.clickFilter = !this.editable ? true : false;
}
if(!this.clickFilter)
{
this.openOrClose(!this.opened);
}
else
{
this.clickFilter = false;
}
}
};
FComboBoxClass.prototype.clickHandler = function(itmNum)
{
if(!this.focused)
{
if(this.editable)
{
this.fLabel_txt.onKillFocus = undefined;
}
this.pressFocus();
}
super.clickHandler(itmNum);
this.selectionHandler(itmNum);
this.onMouseUp = this.releaseHandler;
};
FComboBoxClass.prototype.highlightTop = function(flag)
{
if(!this.editable)
{
this.fLabel_mc.drawItem(this.topLabel,flag);
}
};
FComboBoxClass.prototype.myOnSetFocus = function()
{
super.myOnSetFocus();
this.fLabel_mc.highlight_mc.gotoAndStop("enabled");
this.highlightTop(true);
};
FComboBoxClass.prototype.drawFocusRect = function()
{
this.drawRect(-2,-2,this.width + 4,this._height + 4);
};
FComboBoxClass.prototype.myOnKillFocus = function()
{
if(Selection.getFocus().indexOf("labelField") != -1)
{
return undefined;
}
super.myOnKillFocus();
delete this.fLabel_txt.onKeyDown;
this.openOrClose(false);
this.highlightTop(false);
};
FComboBoxClass.prototype.setPopUpLocation = function(mcRef)
{
mcRef._x = this._x;
var point = {x:this._x,y:this._y + this.proxyBox_mc._height};
this._parent.localToGlobal(point);
mcRef._parent.globalToLocal(point);
mcRef._x = point.x;
mcRef._y = point.y;
if(this.height + mcRef._y >= Stage.height)
{
this.upward = true;
mcRef._y = point.y - this.height - this.proxyBox_mc._height;
}
else
{
this.upward = false;
}
};
FComboBoxClass.prototype.openOrClose = function(flag)
{
if(this.getLength() == 0)
{
return undefined;
}
this.setPopUpLocation(this.container_mc);
if(this.lastSelected != -1 && (this.lastSelected < this.topDisplayed || this.lastSelected > this.topDisplayed + this.numDisplayed))
{
super.moveSelBy(this.lastSelected - this.getSelectedIndex());
}
!flag ? this.downArrow.gotoAndStop(1) : this.downArrow.gotoAndStop(2);
if(flag == this.opened)
{
return undefined;
}
this.highlightTop(!flag);
this.fadeRate = this.styleTable.popUpFade.value;
if(!flag || this.fadeRate == undefined || this.fadeRate == 0)
{
this.opened = this.container_mc._visible = flag;
return undefined;
}
this.setPopUpLocation(this.fader);
this.time = 0;
this.const = 85 / Math.sqrt(this.fadeRate);
this.fader._alpha = 85;
this.container_mc._visible = this.fader._visible = true;
this.onEnterFrame = function()
{
this.fader._alpha = 100 - (this.const * Math.sqrt(++this.time) + 15);
if(this.time >= this.fadeRate)
{
this.fader._visible = false;
delete this.onEnterFrame;
this.opened = true;
}
};
};
FComboBoxClass.prototype.fireChange = function()
{
this.lastSelected = this.getSelectedIndex();
if(!this.editable)
{
this.topLabel = this.getSelectedItem();
this.fLabel_mc.drawItem(this.topLabel,true);
}
else
{
this.value = this.getSelectedItem().label;
this.fLabel_mc.setLabel(this.value);
}
this.executeCallback();
};
FComboBoxClass.prototype.releaseHandler = function()
{
var onCombo = this.boundingBox_mc.hitTest(_root._xmouse,_root._ymouse);
if(this.changeFlag)
{
if(onCombo)
{
this.fireChange();
}
this.openOrClose(!this.opened);
}
else if(onCombo)
{
this.openOrClose(false);
}
else
{
this.onMouseDown = function()
{
if(!this.boundingBox_mc.hitTest(_root._xmouse,_root._ymouse) && !this.hitTest(_root._xmouse,_root._ymouse))
{
this.onMouseDown = undefined;
this.openOrClose(false);
}
};
}
this.changeFlag = false;
this.onMouseUp = undefined;
clearInterval(this.dragScrolling);
this.dragScrolling = undefined;
};
FComboBoxClass.prototype.moveSelBy = function(itemNum)
{
if(itemNum != 0)
{
super.moveSelBy(itemNum);
if(this.editable)
{
this.setValue(this.getSelectedItem().label);
}
if(!this.opened)
{
if(this.changeFlag && !this.isSelected(this.lastSelected))
{
this.fireChange();
}
}
}
};
FComboBoxClass.prototype.myOnKeyDown = function()
{
if(!this.focused)
{
return undefined;
}
if(this.editable && Key.isDown(13))
{
this.setValue(this.fLabel_mc.getLabel());
this.executeCallback();
this.openOrClose(false);
}
else if((Key.isDown(13) || Key.isDown(32) && !this.editable) && this.opened)
{
if(this.getSelectedIndex() != this.lastSelected)
{
this.fireChange();
}
this.openOrClose(false);
this.fLabel_txt.hscroll = 0;
}
super.myOnKeyDown();
};
FComboBoxClass.prototype.findInputText = function()
{
if(!this.editable)
{
super.findInputText();
}
};
FComboBoxClass.prototype.onLabelFocus = function()
{
this._parent._parent.tabFocused = false;
this._parent._parent.focused = true;
this.onKeyDown = function()
{
this._parent._parent.myOnKeyDown();
};
Key.addListener(this);
};
FComboBoxClass.prototype.buttonPressHandler = function()
{
this._parent.pressHandler();
};